package iface.aplicativo.util;

import iface.arquitetura.utilitario.ResourceMessageAnnotation;

import java.lang.reflect.Field;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ResourceMessageFactory {
	private static final long serialVersionUID = -6912213806415871337L;

	public ResourceMessageFactory() {
	}

	/**
	 * Metodo retorna o objeto UtilResource sem referenciar nenhum arquivo de
	 * properties, somente para que o usuario possa acessar seus metodos. Como
	 * por exemplo: getMensagensWeb(arg)
	 * 
	 * @return UtilResource
	 */
	public static UtilResource inicialize() {
		return new UtilResource();
	}

	/**
	 * Metodo retorna o objeto ResourceUtil de uma determinada classe,
	 * instanciada com os arquivos de Properties carregados.
	 * 
	 * @param objeto
	 *            - Objeto que contem a annotation referente aos arquivos
	 *            properties
	 * @return - o objeto ResourceUtil carregado com as informacoes dos arquivos
	 *         properties.
	 * @throws Exception
	 */
	public static UtilResource inicialize(final Object objeto) {
		UtilResource resourceUtil = null;
		final Log log = LogFactory.getLog(ResourceMessageFactory.class);
		try {

			final Field[] fields = objeto.getClass().getDeclaredFields();

			for (final Field field : fields) {
				final ResourceMessageAnnotation resourceMessageAnnotation = field
						.getAnnotation(ResourceMessageAnnotation.class);
				if (resourceMessageAnnotation != null) {
					resourceUtil = new UtilResource(objeto.getClass(),
							resourceMessageAnnotation.propertiesFile());
					field.setAccessible(true);
					field.set(objeto, resourceUtil);
					break;
				}
			}

		} catch (final Exception ex) {
			log.error(
					"Falha no componente ResourceMessageFactory metodo inicialize",
					ex.getCause());
		}
		return resourceUtil;
	}
}
